# 内置函数：所谓内置函数就是python安装后就自带的函数。
# 数学运算函数：
# 求绝对值函数：abs()返回参数的绝对值
print(abs(-34))
# 取近似值函数：round()对浮点数进行近似取值，保留几位小数后面可设置(四舍五入)
print(round(2.66,1))#保留一位小数
# 求次方函数：pow()返回x的y次方的值(求两个参数的幂运算值)
print(pow(3,3))
# 求商和余数函数：divmod()
print(divmod(7,3))
# 求最大值函数：max()返回可迭代对象的元素中的最大值
print(max(12,123,4,5,3,2,3453,344))
# 求最小值函数：min()返回可迭代对象的元素中的最小值
# 求和函数sum()对可迭代对象进行求和计算，可指定相加的参数，没有则默认为0
print(sum(range(50),3))
# 执行字符串表达式函数：eval()
a,b,c=1,2,3
print(eval('a+b+c'))
def TestFun():
    print('我执行了吗？')
    pass
eval('TestFun()')#可以调用函数执行
# 类型转换函数：
# 整数：int()
# 浮点数：float()
# 字符串：str()
# 字符转数字：ord()
# 数字转字符：chr()
# 布尔型：bool()
# 二进制：bin()
# 八进制：oct()
# 十六进制：hex()
# 列表：list()
# 元组：tuple()
# 字典：dict()
dic=dict()
print(type(dic))
dic['name']='小明'
dic['age']=18
print(dic)
# 字节数组：bytes()
print(bytes('我喜欢python',encoding='utf-8'))
# 序列操作函数
# all()函数用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果是返回True，否则返回False，对象中的元素除了0，空，False外都算True(空元组，空列表返回值为True)(类似and的判断)(全部为True，才返回True)
print(all([]))#True
print(all(()))#True
print(all([1,2,4,False]))#False
print(all([1,2,4]))#True
print(all((3,4,0)))#False
print(all([None]))#False
# any()函数用于判断给定的可迭代参数iterable中的所有元素是否都为False，如果是则返回False，否则返回True(类似or的判断)(只要有一个为True，返回True)
print(any((3,4,0)))#True
print(any(('',False,0)))#False
# sorted()函数对所有可迭代的对象进行排序操作
# sort与sorted区别
# 1，sort是应用在list上的方法，sorted可以对所有可迭代的对象进行排序操作
# 2，list的sort方法返回的对已经存在的了列表进行操作，而内置函数sorted方法返回的是一个新的list，而不是在原来基础上进行的操作
li=[2,45,1,67,23,10]#原始对象
print('原始对象内存地址',id(li))
li.sort()#list的排序方法直接修改原始对象(原始对象的引用)
print(li)
print('sort方法排序后内存地址',id(li))
b=sorted(li)#都是默认升序排列
print(b)
print('sorted函数排序后内存地址',id(b))
c=sorted(li,reverse=True)#降序排列
print(c)
# reverse()函数用于反转列表中元素
li.reverse()
print(li)
# range()函数可创建一个整数列表，一般用在for循环中
# zip()函数用于将可迭代对象作为参数，将对象中索引位置对应的元素打包成一个个元组，然后返回这些元组组成的列表，如果各个迭代器的元组个数不一致，则返回列表长度与最短的对象相同，利用*号操作符可以将元组解压为列表
s1=['a','b','c']
s2=['你','我','他']
print(list(zip(s1,s2)))#可以有一个或多个参数
def printBookInfo():
    '''zip函数的使用'''
    books=[]#存储所有图书信息
    id = input('请输入编号：每个项以空格分隔')
    bookName = input('请输入书名：每个项以空格分隔')
    bookpos = input('请输入位置：每个项以空格分隔')
    idlist=id.split(' ')
    namelist = bookName.split(' ')
    poslist = bookpos.split(' ')
    bookInfo=zip(idlist,namelist,poslist)#打包处理
    for bookItem in bookInfo:
        '''遍历图书信息进行存储'''
        dictInfo={'编号':bookItem[0],'书名':bookItem[1],'位置':bookItem[2]}
        books.append(dictInfo)#将字典对象添加到列表容器中
    for item in books:
        print(item)
        pass
printBookInfo()
# enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列，同时列出数据和数据下标，一般用在for循环当中。
listObj=['a','b','c']
for item in enumerate(listObj,5):#前者参数为一个序列、迭代器或其他支持迭代对象，后者参数为下标起始位置
    print(item)
dicObj={}
dicObj['name']='李易峰'
dicObj['hobby']='唱歌'
dicObj['pro']='设计'
print(dicObj)
for item in enumerate(dicObj):
    print(item)
# 集合操作函数
# set(集合)是Python中的一种数据类型，是一个无序且不重复的元素集合
# set不支持索引和切片，是一个无序的且不重复的容器(类似字典，但只有key)
dic1={}
dic2={1:3}
set1={1,2,3}
print(type(set1))
print(type(dic1))
print(type(dic2))
# 添加操作：add()
set1.add('python')
print(set1)
# 清空操作：clear()
set1.clear()
print(set1)
# 差集操作：difference()返回第一个集合A不同于第二个集合B的元素，即返回的集合元素包含在第一个集合A中,但不包含在第二个集合B中(返回新的集合)
set1={1,2,3}
set2={2,3,4}
rs=set1.difference(set2)#变量接收新对象
print(rs)
# 交集操作：intersection()既属于集合A又属于集合B的元素所组成的集合(返回新的集合)
print(set1.intersection(set2))
# 并集操作：union()把A与B合并在一起组成的集合(返回新的集合)
print(set1.union(set2))
# 随机移除操作：pop()随机移除某个元素并且返回那个元素，函数pop没有参数
quData=set1.pop()
print(quData)
print(set1)
# 指定移除操作：discard()移除指定数据(使用原始对象的引用,操作会在原始对象上生效)
set1.discard(3)
print(set1)
# update()更新集合(类似并集操作但不会创建新对象而是在原始对象上更新)
set1={1,2,3}
set2={2,3,4}
set1.update(set2)
print(set1)
